import java.util.*;
public class test {
    /*给你一组多米诺骨牌 dominoes 。形式上，
    dominoes[i] = [a, b] 与 dominoes[j] = [c, d] 等价
    当且仅当 (a == c 且 b == d) 或者 (a == d 且 b == c)
            。即一张骨牌可以通过旋转 0 度或 180 度得到另一张多米诺骨牌。
    在 0 <= i < j < dominoes.length 的前提下，
    找出满足 dominoes[i] 和 dominoes[j] 等价的骨牌对 (i, j) 的数量。*/
    public static int seek(int[][] nums) {
        int n=nums.length;
        int count=0;
        Map<String,Long>arr=new HashMap<>();
        for(int i=0;i<n;i++){
            int a=nums[i][0];
            int b=nums[i][1];
            //字符串映射一键连接，1-2，2-1
            String d=a<=b?a+"-"+b:b+"-"+a;
            //数学映射法(1,2)=(2,1)!=(3,0)
            //int result=Math.min(a,b)*10000+Math.max(a,b);//最小值乘1e4确保映射的键相同
            arr.put(d,arr.getOrDefault(d,0L)+1);
        }
        for(long c:arr.values()){
            count+=c*(c-1)/2;
        }
        return count;
    }
    public static void main(String[] args){
        Scanner sc=new Scanner(System.in);
        int n=sc.nextInt();
        int[][] nums=new int[n][2];
        for(int i=0;i<n;i++){
            for(int j=0;j<2;j++){
                nums[i][j]=sc.nextInt();
            }
        }
        int count=seek(nums);
        System.out.println(count);
    }
}
